public class test {
    //方法一：相向双指针
    public int removeElement(int[] nums, int val) {
        //双指针相向遍历，把相等的元素直接等于right指向的元素进行
        int left = 0;
        int right = nums.length-1;
        while(left<=right) {
            if(nums[left] == val) {
                //注意这里不能left++，如果赋值过来的元素正好等于val，就会跳过
                nums[left] = nums[right];
                right--;
            } else {
                left++;
            }
        }
        return left;
    }


    //方法二：同向双指针
    public int removeElement(int[] nums, int val) {
        //双指针同向遍历，不是val就写入
        int dest =0;
        int src = 0;
        while(src != nums.length) {
            if(nums[src] == val) {
                src++;
            } else {
                nums[dest] = nums[src];
                dest++;
                src++;
            }
        }
        return  dest;
    }

    
    //方法三：遍历，不是val就写入
    public int removeElement(int[] nums, int val) {
            //遍历，不是val就写入
            int count = 0;
            for(int i = 0;i<nums.length;i++) {
                //不是就写入
                if(nums[i] !=val) {
                    nums[count++] = nums[i];
                }
            }
            return count;
        }

}
